/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package webapps.servlet.frontoffice;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import metier.pojo.Client;
import metier.pojo.Compte;
import metier.session.IClientManager;
import webapps.tools.Message;
import webapps.tools.ParameterModele;
import webapps.tools.Routeur;
import webapps.tools.Tools;

/**
 *
 * @author Adrien
 */
public class AdminCompteController extends HttpServlet {
    
    @EJB
    IClientManager manager;
    
    public static final String[] message = {
        "Le compte a bien été rajoute",
        "Impossible de rajouter le compte!",
        "Vous ne pouvez pas transférer de l'argent sur le même compte",
        "Le transfert a ete effectue avec succes",
        "Le transfert de compte a echoue",
        "Le formulaire de transfert est incomplet",
        "La suppression a bien ete effectuee",
        "Vous ne pouvez pas supprimer cette compte. Vous devez au prealable le vider pour le supprimer.",
        "La suppression a echouee pour une raison inconnue. Veuillez regarder les logs.",
        "Le formulaire de suppression est incomplet"
        
    }; 
    
    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
           if (request.getParameter("id") == null || !Tools.estEntier( request.getParameter("id")))
               return;
           
           int id = Integer.parseInt(request.getParameter ("id"));
           Client leclient = manager.findClientWithAccount(id);
           
           String action = request.getParameter("action");
           String message ="";
           int etat = Tools.PAS_MESSAGE;
           if ( action != null)
           {
               if (action.equals("add"))
               {
                   //Cette variable indique si le serveur possède suffisament d'information pour rajouter le compte à l'utilisateur
                   boolean addCompte_OK = true;
                   
                   String nom = request.getParameter("nom");
                   String szMontant = request.getParameter("montant");
                   
                   addCompte_OK &= nom != null;
                   addCompte_OK &= szMontant != null && Tools.estEntier(szMontant);
                   
                   if (addCompte_OK)
                   {
                    manager.addCompte(id, nom, Float.parseFloat(szMontant));
                    message="0";
                    etat = Tools.MESSAGE_SUCCES;
                   }else
                   {
                       message = "1";
                       etat = Tools.MESSAGE_ERREUR;
                   }
               }
               else if (action.equals ("transfert"))
               {
                   String debiteur  = request.getParameter("debiteur");
                   String crediteur = request.getParameter("crediteur");
                   String montant   = request.getParameter("montant");
                   
                   boolean maj = true;
                   maj &= debiteur  != null;
                   maj &= Tools.estEntier(debiteur);
                   maj &= crediteur != null;
                   maj &= Tools.estEntier(crediteur);
                   maj &= montant   != null;
                   maj &= Tools.estFlottant(montant);
                   
                   if (maj && crediteur.equals(debiteur))
                   {
                       message ="2";
                       maj = false;
                   }
                   
                   
                   if (maj == true)
                   {
                       boolean success = manager.transfert(Integer.parseInt(debiteur), 
                               Integer.parseInt(crediteur), 
                               Float.parseFloat(montant));
                       if (success)
                       {
                           message = "3";
                           etat    = Tools.MESSAGE_SUCCES;
                       }
                       else
                       {
                            message = "4";
                            etat    = Tools.MESSAGE_ERREUR;
                       }
                   }
                   else
                   {
                       if (message.equals(""))
                        message = "5";
                       
                       etat    = Tools.MESSAGE_ERREUR;
                   }
               }
               else if (action.equals("supprimer"))
               {
                   String compte = request.getParameter("compte");
                   
                   boolean maj = true;
                   
                   maj &= compte != null;
                   maj &= Tools.estEntier(compte);
                   
                   if (maj == true)
                   {
                       int code = manager.delCompte(Long.parseLong(compte));
                       if (code == 0)
                       {
                           message = "6";
                           etat    = Tools.MESSAGE_SUCCES;
                       }
                       else if (code == 1)
                       {
                           message = "7";
                           etat    = Tools.MESSAGE_ERREUR;
                       }
                       else if (code == 2)
                       {
                           message = "8";
                           etat    = Tools.MESSAGE_ERREUR;
                       }
                   }
                   else
                   {
                       message = "9";
                       etat    = Tools.MESSAGE_ERREUR;
                   }
               }
               
               Tools.addMessage(message, etat, response);
               
               response.sendRedirect("AdminCompteController?id=" + leclient.getId());
               return;
           }
           else
           {
               Message unmessage = Tools.getMessage(request, response);
               if (unmessage != null)
               {
                message = unmessage.getContenu();
                etat = unmessage.getEtat();
               }
           }
           
           List<Compte> comptes = leclient.getComptes();
           request.setAttribute("client", leclient);
           request.setAttribute("comptes", comptes);

           if (etat != Tools.PAS_MESSAGE)
           {
               request.setAttribute("etat", etat);
               request.setAttribute("message", message);
           }
           
           Routeur r = new Routeur();
           ParameterModele param = new ParameterModele();
           param.setTitreNavigateur("Client n°" + leclient.getId());
           param.setTitrePage("Liste des comptes du client :" + leclient.getPrenom() + " " + leclient.getNom() );
           param.setPagecontenu("/backoffice/comptes.jsp");
           r.router(request, response,"/backoffice/modele.jsp",param);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
